package com.day08;

/**
 * 面向对象的特征之二: 继承性
 *
 * 一.继承性的好处:
 *      1.减少了代码的冗余，提高了代码的复用性。
 *      2.便于功能的扩展。
 *      3.为之后的多态性提供了前提使用。
 * 二.继承性的格式: class A extends B
 *      A:子类，派生类，subclass
 *      B:父类,基类，superclass
 *
 *     体现: 一旦子类A继承父类B以后，子类A中就获取了父类B中声明的结构，属性，方法。
 *     私有的方法不能继承
 *     只是因为封装性的影响，使得子类不能直接调用父类的结构而已。
 *     2.2 子类继承父类后，还可以声明自己特有的属性和方法，实现功能的拓展。
 *      子类和父类的关系，不同于子集和集合的关系。
 *      extends： 继承，延展，扩展。
 *
 * 三.Java中关于继承性的一些规定
 *      java只支持单继承和多层继承，不允许重复继承
 *          1.一个子类只能有一个父类
 *          2.一个父类可以派生出多个子类，就是一个类可以被多个子类继承。
 *          3.子父类是相对的概念。
 *          4.子类直接继承的父类，称为:直接父类，间接继承的父类称为:间接父类。
 *          5.子类继承父类后，就获取了直接父类以及所有间接父类中声明的属性和方法。
 *          6.在java中，所有类的父类都是Object.
 *
 *
 *四. 1.如果我们没有显式的声明一个类的父类的话，则此类继承于Java.lang.Object类。
 *    2.意味着所有的java类都具有java.lang.Object类声明的功能。
 *
 *super关键字的使用:
 *     1.super理解为:父类的
 *     2.super可以用来调用:属性，方法，构造器
 *
 *     3.super的使用:
 *          3.1我们可以在子类的方法或构造器中，通过使用"super.属性"或"super.方法"的方式，显示的调用父类中声明的属性或方法。
 *          但是，通常情况下，我们习惯省略"super."
 *          3.2特殊情况:当子类和父类中定义了同名的属性时，我们要想在子类中调用父类中声明的属性，则必须显式使用"super.属性"方式，
 *          表明调用的是父类中声明的属性。
 *          3.3 特殊情况: 方法的话
 *
 *
 */
public class ExtendsTest {
    public static void main(String[] args) {
        Person person = new Person();
        person.age = 1;
        person.eat();

        Student student = new Student();

        student.eat();
        student.sleep();
        student.study();
        student.show();
    }
}
